package com.qth.valet.service;

import com.qth.valet.common.utils.ResponseResult;
import com.qth.valet.entity.po.Coupon;
import com.qth.valet.entity.req.PayReq;
import com.qth.valet.entity.vo.WxPayment;
import com.qth.valet.entity.vo.WxPaymentResponse;

import javax.servlet.http.HttpServletRequest;

/**
 * 小程序支付服务接口
 *
 * @author Skyline
 */
public interface WechatPaymentService {

    /**
     * 创建微信支付订单
     *
     * @param paymentDTO 支付请求参数
     * @return 支付响应数据
     */
    ResponseResult<WxPaymentResponse> createPayment(WxPayment paymentDTO, PayReq payReq, Coupon coupon);

    /**
     * 查询支付订单状态
     *
     * @param orderId 查询参数
     * @return 查询结果
     */
    ResponseResult<Object> queryPayment(String orderId);

    /**
     * 处理微信支付回调通知
     *
     * @param request HTTP请求对象
     * @return 处理结果
     */
    String handlePaymentNotify(HttpServletRequest request);

    /**
     * 关闭支付订单
     *
     * @param outTradeNo 商户订单号
     * @return 关闭结果
     */
    ResponseResult<Object> closePayment(String outTradeNo);

    /**
     * 申请退款
     *
     * @param outTradeNo 商户订单号
     * @param refundAmount 退款金额
     * @param refundReason 退款原因
     * @return 退款结果
     */
    ResponseResult<Object> refundPayment(String outTradeNo, Integer refundAmount, String refundReason);

}
